﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using EveMarketsDAO;

namespace EveMarkets
{
	/// <summary>
	/// Logique d'interaction pour Simalution.xaml
	/// </summary>
	public partial class Simalution : Window
	{
		private readonly IQueryable<ResultatsDetails> _resultatsDepart;
		private IQueryable<ResultatsDetails> ResultatsDepart
		{
			get { return _resultatsDepart; }
		}

		private decimal PrixVenteOrigine { get; set; }

		/// <summary>
		/// Constructeur de la fenêtre Simulation.
		/// </summary>
		/// <param name="resultatsDetailses"></param>
		/// <param name="nomObjet"></param>
		/// <param name="prixVente"></param>
		public Simalution(IQueryable<ResultatsDetails> resultatsDetailses, string nomObjet, decimal prixVente)
		{
			InitializeComponent();
			DataContext = ContexteDAO.ContexteDonnees;

			_resultatsDepart = resultatsDetailses;
			PrixVenteOrigine = prixVente;

			// Affichage de le dataGrid de départ.
			dataGridDepart.ItemsSource = ResultatsDepart;
			dataGridName.ItemsSource = ResultatsDepart;
			textBoxNbreBlueprint.Text = "1";

			decimal sumPrix = ResultatsDepart.Sum(w => w.PrixTotal);

			labelNameItem.Content = nomObjet;
			textBoxTotalPrice.Text = sumPrix.ToString("N");
			textBoxBenefice.Text = (PrixVenteOrigine - sumPrix).ToString("N");
		}
		
		/// <summary>
		/// Mise à jour du dataGrid après saisie du nombre de Run voulu.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void Event_TextChanged_UpdateDataGrid(object sender, TextChangedEventArgs e)
		{
			// Je récupère le nombre d'unité voulue.
			TextBox tb = sender as TextBox;
			
			int a = 0;
			// Pour chaque caractère je check si c'est un chiffre.
			foreach (Char c in tb.Text.ToCharArray())
			{
				// Si ce n'est pas un caratère, je le supprime.
				if (!Char.IsDigit(c))
				{
					textBoxNbreBlueprint.Text = tb.Text.Remove(a, 1);
					return;
				}
				a++;
			}

			// Récupération du nombre de Runs voulus.
			int nbreBp = Convert.ToInt32(textBoxNbreBlueprint.Text);
			
			// Création de liste avec les nouvelles valeurs.
			List<ResultatsDetails> list = new List<ResultatsDetails>();
			foreach (var resultat in ResultatsDepart)
			{
				ResultatsDetails newResDetails = new ResultatsDetails
				                                 	{
				                                 		IdItem = resultat.IdItem,
				                                 		IdStationAchat = resultat.IdStationAchat,
				                                 		IdStationVente = resultat.IdStationVente,
				                                 		MaterielId = resultat.MaterielId,
				                                 		Quantite = resultat.Quantite * nbreBp
				                                 	};

				newResDetails.PrixTotal = resultat.PrixUnitaire * (newResDetails.Quantite);
				newResDetails.PrixUnitaire = resultat.PrixUnitaire;

				list.Add(newResDetails);
			}

			// Recalcul du nouveau total.
			decimal sumNewPrice = list.Sum(x => x.PrixTotal);

			// Affichage.
			textBoxNewTotalPrice.Text = sumNewPrice.ToString("N");
			textBoxNewBenefice.Text = ((PrixVenteOrigine * nbreBp) - sumNewPrice).ToString("N");
			dataGridFinal.ItemsSource = list;
		}

	}
}
